const getInput=(el)=>{
    return el instanceof HTMLInputElement ? el : el.querySelector("input");
};
let inputHandler=()=>{},blurHandler=()=>{};

/**
 * 仅支持输入数字，并支持输入负数和小数
 */
export default {
    name:"number",
    bind(el,{arg,value,modifiers,expression}){
        // 并不支持中文输入法的-、e等键的输入
        // el.addEventListener("keypress",function(e){
        //     e=e || window.event;
        //     let charcode=typeof e.charCode === "number" ? e.charCode : e.keyCode;
        //     let pattern=/\d/;
        //     if(!pattern.test(String.fromCharCode(charcode)) && charcode > 9 && !e.ctrlKey){
        //         if(e.preventDefault){
        //             e.preventDefault();
        //         }else{
        //             e.returnValue=false;
        //         };
        //     };
        // });
        // 推荐使用
        // console.log(arg);
        // console.log(value);
        const input=getInput(el);
        if(input && (arg.inputType && arg.inputType === "number" || arg.inputType == true)){
            const decimal=arg.decimal ? `(\\.\\d{0,${arg.decimal}})?` : "";
            const integer=value ? `(0|[1-9]\\d{0,${value-1}})` : "(0|[1-9]\\d*)";
            // const integer=value ? `(\\-?)\\d{0,${value-1}}` : "(\\-?)\\d+";
            const symbol=arg.negativeSign ? "(\-?)" : ""; //是否支持负数
            const regExp=new RegExp((symbol+integer+decimal),"g");
            inputHandler=()=>{
                // console.log(regExp);
                // console.log(input.value);
                // console.log(input.value.toString().trim());
                // console.log(input.value.toString().trim().replace(/[^\d.-]/g,""));
                // console.log(input.value.toString().trim().replace(/[^\d.-]/g,"").match(regExp))
                // input.value=input.value.toString().trim();
            };
            // 失去焦点时触发
            blurHandler=()=>{
                input.value = input.value.toString().trim().replace(/[^\d.-]/g,"").match(regExp) ?
                              [null,undefined].includes(input.value.toString().trim().replace(/[^\d.-]/g,"").match(regExp)[0]) ? "" :
                              input.value.toString().trim().replace(/[^\d.-]/g,"").match(regExp)[0] : "";
                // input.value=input.value.toString().trim().replace(/[^\d.-]/g,"")?.match?.(regExp)?.[0] ?? "";
            };
            input.addEventListener("input",inputHandler,true);
            input.addEventListener("blur",blurHandler,true);
        };
    },
    unbind(el){
        const input=getInput(el);
        if(input){ //防止报错
            input.removeEventListener("input",inputHandler,true);
            input.removeEventListener("blur",blurHandler,true);
        };
    }
};
